package br.com.emersondeandrade.modelo.core.casa;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.emersondeandrade.infraEstrutura.criptografia.Criptografia;
import br.com.emersondeandrade.modelo.core.dispositivo.Dispositivo;
import br.com.emersondeandrade.modelo.core.eventos.ProcessadorEventos;
import br.com.emersondeandrade.modelo.core.historico.Historico;
import br.com.emersondeandrade.modelo.core.historico.HistoricoService;
import br.com.emersondeandrade.modelo.exeption.ExecultarComandoExeption;
import br.com.emersondeandrade.modelo.exeption.NotConectedExeption;
import br.com.emersondeandrade.modelo.exeption.ObjectNaoEncontradoExeption;
import br.com.emersondeandrade.modelo.repositorio.CasaRepositorio;
import br.com.emersondeandrade.modelo.repositorio.DispositivoRepositorio;


@Service("casaFacadeImp")
public class CasaFacadeImp implements CasaFacade {
	
		
	@Autowired
	DispositivoRepositorio dispositivoRepositorio;
		
	@Autowired
	CasaRepositorio casaRepositorio;
				
	@Autowired
	ProcessadorEventos processadorEventos;
	
	@Autowired
	HistoricoService historicoService;
	
	@Autowired
	Criptografia criptService;
	
		
	
	public void acionar(String keyArduino,String keyDispositivo) throws NotConectedExeption, ExecultarComandoExeption,ObjectNaoEncontradoExeption  {
		
		
		String keyCript =  criptService.encodeMD5(keyArduino);
		
		Dispositivo dispositivo = dispositivoRepositorio.getDispositivoByKey(keyCript,keyDispositivo);
		
		dispositivo.acionar();
		
		processadorEventos.processar( dispositivo );
		
		historicoService.novoHistorico(dispositivo);
					
	}
	
	
	public String geraHashMobile(String keyArduino){
		return criptService.cript(keyArduino);
	}
	
	public String descriptografaHashMobile(String hash) {
		return criptService.decript(hash);
	}
	
	
	

	public Dispositivo getDispositovoById(int idDispositivo) throws ObjectNaoEncontradoExeption {
		return dispositivoRepositorio.getById(idDispositivo);
	}
	

	public Casa getCasaByKeyArduino(String key)	throws ObjectNaoEncontradoExeption {
		
		String keyCript = criptService.encodeMD5(key);
		
		return casaRepositorio.getCasaByKeyArduino(keyCript);
	}

	
	
	public List<Historico> buscaTodosHistoricos(String keyArduino,int initresult,int maxResult,String atributo, int ordem){
		String keyCript = criptService.encodeMD5(keyArduino);
		return historicoService.buscaTodosHistoricos(keyCript, initresult, maxResult, atributo, ordem);
		
	}













	
	
	

	
	
	
	
	
	
	
	
	
	

}
